package com.swak.fx.support.ui;

import javafx.scene.Node;
import javafx.scene.layout.StackPane;

/**
 * 扩展 StackPane.
 * 
 * @author 618lf
 */
public class UIStackPane extends StackPane implements UILifecycle {

	// ================================================================================
	// Properties
	// ================================================================================
	private final String STYLE_CLASS = "ui-stack-pane";
	private final String STYLESHEET = UI.load("css/UIStackPane.css");

	public UIStackPane() {
		this.init();
	}

	@Override
	public void initializeParts() {
		getStyleClass().add(STYLE_CLASS);
	}

	@Override
	public void layoutParts() {
	}

	@Override
	public void setupValueChangedListeners() {

	}

	// ================================================================================
	// Funcs
	// ================================================================================
	public Node topNode() {
		if (this.getChildren().isEmpty()) {
			return null;
		}
		int lastIndex = this.getChildren().size() - 1;
		return this.getChildren().get(lastIndex);
	}

	public UIStackPane switchTop(Node node) {
		Node topNode = this.topNode();
		if (topNode == node) {
			return this;
		}
		this.getChildren().forEach(n -> {
			if (n != node) {
				n.setVisible(false);
			}
		});
		this.getChildren().remove(node);
		this.getChildren().add(node);
		if (node != null) {
			node.setVisible(true);
		}
		return this;
	}

	// ================================================================================
	// Overridden Methods
	// ================================================================================
	@Override
	public String getUserAgentStylesheet() {
		return STYLESHEET;
	}
}